108821aacbd363d8eb1cf5a9eeed1476dbec49e9,jetty-servlet/src/test/java/org/eclipse/jetty/servlet/AsyncContextListenersTest.java,AsyncContextListenersTest,testListenerAddedFromListener,#,136
Before Change
response = parser.readResponse(reader);
Assert.assertEquals("200", response.getCode());
Assert.assertEquals(1, completes.get());
}
}
@Test
After Change
@Test
public void testListenerAddedFromListener() throws Exception
{
final AtomicReference<CountDownLatch> completes = new AtomicReference<>(new CountDownLatch(1));
String path = "/path";
prepare(path, new HttpServlet()
{
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
AsyncContext asyncContext = request.startAsync(request, response);
asyncContext.addListener(new AsyncListener()
{
@Override
public void onStartAsync(AsyncEvent event) throws IOException
{
// This method should not be invoked because we add the
// listener *after* having called startAsync(), but we
// add a listener to be sure it's not called (it will
// screw up the completes count and test will fail).
event.getAsyncContext().addListener(this);
}
@Override
public void onComplete(AsyncEvent event) throws IOException
{
completes.get().countDown();
}
@Override
public void onTimeout(AsyncEvent event) throws IOException
{
}
@Override
public void onError(AsyncEvent event) throws IOException
{
}
});
asyncContext.complete();
}
});
try (Socket socket = new Socket("localhost", _connector.getLocalPort()))
{
OutputStream output = socket.getOutputStream();
String request = "" +
"GET " + path + " HTTP/1.1\r\n" +
"Host: localhost\r\n" +
"\r\n";
output.write(request.getBytes(StandardCharsets.UTF_8));
output.flush();
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream(), StandardCharsets.UTF_8));
SimpleHttpParser parser = new SimpleHttpParser();
SimpleHttpResponse response = parser.readResponse(reader);
Assert.assertEquals("200", response.getCode());
completes.get().await(10,TimeUnit.SECONDS);
// Send a second request
completes.set(new CountDownLatch(1));
output.write(request.getBytes(StandardCharsets.UTF_8));
output.flush();
response = parser.readResponse(reader);
Assert.assertEquals("200", response.getCode());
completes.get().await(10,TimeUnit.SECONDS);
}
}
@Test